package com.roads.site.service;

import com.roads.common.core.domain.AjaxResult;
import com.roads.site.domain.SiteLabourStaffSalaryAnnex;
import com.roads.site.domain.SiteLabourStaffSalaryDetail;
import com.roads.site.domain.SiteLabourStaffSalaryMaster;

import java.util.List;

/**
 * 劳务工-工资Service接口
 *
 * @author nhp
 * @date 2022-11-15
 */
public interface ISiteLabourStaffSalaryService {

    /**
     * 查询劳务工工资列表
     *
     * @param model 劳务工资
     * @return 劳务工资集合
     */
    List<SiteLabourStaffSalaryMaster> selectMasterModelList(SiteLabourStaffSalaryMaster model);

    /**
     * 查询劳务工工资明细列表
     *
     * @param model 劳务工资明细
     * @return 劳务工资明细集合
     */
    List<SiteLabourStaffSalaryDetail> selectDetailModelList(SiteLabourStaffSalaryDetail model);

    /**
     * 查询劳务工工资附件列表
     *
     * @param model 劳务工资附件
     * @return 劳务工资附件集合
     */
    List<SiteLabourStaffSalaryAnnex> selectAnnexList(SiteLabourStaffSalaryAnnex model);

    /**
     * 检查工资发放日期是否唯一（同一个项目标段下）
     *
     * @param model 劳务工工资
     * @return 结果
     */
    String checkSalaryDateUnique(SiteLabourStaffSalaryMaster model);

    /**
     * 新增劳务工工资
     *
     * @param master 劳务工工资
     * @return 结果
     */
    int addMaster(SiteLabourStaffSalaryMaster master);

    /**
     * 新增劳务工工资明细
     *
     * @param detail 劳务工工资明细
     * @return 结果
     */
    int addDetail(SiteLabourStaffSalaryDetail detail);

    /**
     * 新增劳务工工资附件
     *
     * @param model 附件
     * @param uuid uuid
     * @return 结果
     */
    int insertAnnex(SiteLabourStaffSalaryAnnex model, String uuid);

    /**
     * 获取劳务工工资详情
     *
     * @param id 主键
     * @return 劳务工工资
     */
    SiteLabourStaffSalaryMaster getMaster(Integer id);

    /**
     * 获取劳务工工资明细详情
     *
     * @param id 主键
     * @return 劳务工工资明细
     */
    SiteLabourStaffSalaryDetail getDetail(Integer id);

    /**
     * 根据主键ID获取附件信息
     * @param id 附件ID
     * @return 附件详情
     */
    SiteLabourStaffSalaryAnnex getAnnex(Long id);

    /**
     * 修改劳务工工资
     *
     * @param master 劳务工工资
     * @return 结果
     */
    int updateMaster(SiteLabourStaffSalaryMaster master);

    /**
     * 修改劳务工工资明细
     *
     * @param detail 劳务工工资明细
     * @return 结果
     */
    int updateDetail(SiteLabourStaffSalaryDetail detail);

    /**
     * 删除劳务工工资
     *
     * @param ids 主键集合
     * @return 结果
     */
    int deleteMaster(Integer[] ids);

    /**
     * 删除劳务工工资明细
     *
     * @param ids 主键集合
     * @return 结果
     */
    int deleteDetail(Integer[] ids);

    /**
     * 删除劳务工工资附件
     * @param id 主键
     * @return 结果
     */
    int deleteAnnex(Long id);

    /**
     * 劳务工工资明细导入
     *
     * @param list 劳务工工资明细
     * @param updateSupport 是否覆盖
     * @param masterId 主表主键
     * @return 结果
     */
    AjaxResult importData(List<SiteLabourStaffSalaryDetail> list, boolean updateSupport, Integer masterId);

}
